package coder.nav.utils;

import java.math.BigDecimal;
import java.util.Objects;

public class MathUtils {

    /**
     * BigDecimal加法
     */
    public static BigDecimal decimalAdd(BigDecimal x, BigDecimal y){
        if( Objects.isNull(x) ){
            x = BigDecimal.ZERO;
        }
        if( Objects.isNull(y) ){
            y = BigDecimal.ZERO;
        }
        return x.add(y);
    }

    /**
     * BigDecimal减法，左减右
     */
    public static BigDecimal decimalSub(BigDecimal x, BigDecimal y){
        if( Objects.isNull(x) ){
            x = BigDecimal.ZERO;
        }
        if( Objects.isNull(y) ){
            y = BigDecimal.ZERO;
        }
        return x.subtract(y);
    }

    /**
     * BigDecimal乘法
     * @param scale int 保留几位小数
     */
    public static BigDecimal decimalMul(BigDecimal x, BigDecimal y, Integer scale){
        if( Objects.isNull(x) ){
            x = BigDecimal.ZERO;
        }
        if( Objects.isNull(y) ){
            y = BigDecimal.ZERO;
        }
        if (Objects.nonNull(scale)){
            return x.multiply(y).setScale(scale, BigDecimal.ROUND_HALF_UP);
        }
        return x.multiply(y);
    }

    /**
     * BigDecimal除法
     * @param scale int 保留几位小数
     */
    public static BigDecimal decimalDiv(BigDecimal x, BigDecimal y, Integer scale){
        if( Objects.isNull(x) ){
            x = BigDecimal.ZERO;
        }
        if( Objects.isNull(y) ){
            y = BigDecimal.ZERO;
        }
        if (Objects.isNull(scale)){
            scale = 2;
        }
        return x.divide(y, scale, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 比较两数大小(BigDecimal类型)
     */
    public static boolean compareNumberSizes(BigDecimal x , BigDecimal y ){
        if( Objects.isNull(x) ){
            x = BigDecimal.ZERO;
        }
        if( Objects.isNull(y) ){
            y = BigDecimal.ZERO;
        }
        int ret = x.compareTo(y);
        return ret > 0;
    }

    /**
     * 比较两数大小(int类型)
     */
    public static boolean compareNumberSizes(Integer x , Integer y ){
        if( Objects.isNull(x) ){
            x = 0;
        }
        if( Objects.isNull(y) ){
            y = 0;
        }
        int ret = x.compareTo(y);
        return ret > 0;
    }

}

